package com.example.softwareconfigurationcoursedesign.LoginRegister.Filter;

import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

import java.io.IOException;
import java.io.PrintWriter;

@WebFilter(urlPatterns = {"/shopcar.jsp"}) // 定义需要过滤的 URL 范围
public class LoginFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 如果需要，可以进行初始化代码
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;

        // 设置字符编码
        res.setCharacterEncoding("UTF-8");

        // 为使用 UTF-8 编码的 HTML 设置内容类型
        res.setContentType("text/html; charset=UTF-8");

        // 检查用户是否已登录（这里根据你的逻辑来实现）
        if (userIsLoggedIn(req)) {
            // 用户已登录，允许访问所请求的资源
            chain.doFilter(request, response);
        } else {
            PrintWriter out = response.getWriter();
            out.println("<script>alert('登录失败 请您登录后再进入'); window.location.href='shop.jsp';</script>");
            // 用户未登录，重定向到购物车页面
        }
    }

    private boolean userIsLoggedIn(HttpServletRequest request) {
        HttpSession session = request.getSession(false); // 获取会话，如果不存在则返回 null

        // 检查会话中是否存在已登录的用户信息
        return session != null && session.getAttribute("loggedInUser") != null;
    }

    @Override
    public void destroy() {
        // 如果需要，可以进行清理代码
    }
}
